home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
util
/
time
/
date2day2.lha
/
d2d.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-04-21
|
3KB
|
145 lines
/* d2d (simple frontend for _date2day_)
(c) Armin.Obersteiner@giga.or.at
input: <day>.<month>.<year>
output: Monday-Sunday, Error
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
char *d[7]=
{
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
char prg[256];
int date2day(int day,int month,int year);
int sjahr(int year);
void main(int argc, char *argv[])
{
int day,month,year;
char da[10],mo[10],ye[20];
if(argc!=2)
{
printf("USAGE: %s <day>.<month>.<year>\n",argv[0]);
printf(" example: %s 27.3.1995\n",argv[0]);
printf(" first usable date: 1.1.1801\n");
}
else
{
int h;
strcpy(prg,argv[0]);
strcpy(da,strtok(argv[1],"."));
strcpy(mo,strtok(NULL,"."));
strcpy(ye,strtok(NULL," \0\n"));
day=atoi(da);
month=atoi(mo);
year=atoi(ye);
h=date2day(day,month,year);
if(h)
{
printf("%s\n",d[h-1]);
}
else
{
printf("Date NOT valid !!\n");
}
}
}
/* date2day
(c) Armin.Obersteiner@giga.or.at
input: <int> day,month,year
output:<int> 0,1-7
0: error (before 1.1.1801 - this should be enough
if somebody knows a "day" before that please mail it to me)
1-7: Monday-Sunday
*/
int date2day(int day,int month,int year)
{
int md[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int j,i=0;
int jahr=0;
int s;
if(year<1801) return 0;
if( (month<1) || (month>12) ) return 0;
if(day<1) return 0;
s=sjahr(year);
if( (day>md[month-1]) )
{
if(!s) return 0;
if( (s) && (month=2) && (day>29) ) return 0;
}
for(j=1801;j<year;j++) if(sjahr(j)) i++;
jahr=(year-1801)*365+i+day;
for(i=1;i<month;i++) jahr=jahr+md[i-1];
if(s && (month>2)) jahr=jahr+1;
switch((int)fmod((double)jahr,(double)7))
{
case 0: return 4; /* 1.1.1801 is a Thursday ->4 */
break;
case 1: return 5;
break;
case 2: return 6;
break;
case 3: return 7;
break;
case 4: return 1;
break;
case 5: return 2;
break;
case 6: return 3;
break;
}
}
/* sjahr
(c) Armin.Obersteiner@giga.or.at
input: <int> year
output: <int> 0,1
0: normal year
1: leap-year
*/
int sjahr(int year)
{
int schalt=0;
if(fmod((double)year,(double)4)==0) schalt=1;
if(fmod((double)year,(double)100)==0) if(fmod((double)year,(double)400)!=0) schalt=0;
return schalt;
}